
# -*- coding: utf-8 -*-

from django.db import models
from comunidadcyt.gruposDeInvestigacion.models import GruposDeInvestigacion
from comunidadcyt.partners.models import Partners
from django.contrib.auth.models import User
from django.utils.encoding import force_unicode
from comunidadcyt.lineasDeInvestigacion.models import LineasDeInvestigacion
from comunidadcyt.middleware import get_request
from comunidadcyt.departamentos.models import Departamentos
import unicodedata
import datetime

class Proyectos(models.Model):
    Nombre_proyecto = models.CharField(max_length=200, verbose_name="* Nombre", unique=True)
    Descripcion_proyecto = models.TextField(blank=True, verbose_name="Descripción")  
    Responsables = models.ManyToManyField(User, related_name="proyecto_que_dirige", verbose_name="Responsables", null=True, blank=True)
    Departamentos = models.ManyToManyField(Departamentos,related_name="proyectos", verbose_name="* Departamentos")
    Lineas = models.ManyToManyField(LineasDeInvestigacion,related_name="proyectos", verbose_name="* Líneas de Investigación")
    Partners = models.ManyToManyField(Partners,related_name="proyectos", verbose_name="Partners",blank=True,null=True)
    Grupos = models.ManyToManyField(GruposDeInvestigacion,related_name="proyectos", verbose_name="* Grupos de Investigación")    
    Fuente_de_financiamiento = models.CharField(max_length=300,blank=True,null=True)
    Capital = models.FloatField(blank=True,null=True)
    Colaboradores = models.CharField(max_length=300,blank=True) #otras universidades por ejemplo
    Miembros = models.ManyToManyField(User,related_name="proyectos", verbose_name="* Miembros")
    Fecha_inicio = models.DateField(verbose_name="* Fecha de inicio")
    Fecha_finalizacion = models.DateField(blank=True,null=True, verbose_name="Fecha de finalización")
    PaginaWeb = models.URLField(max_length=300,blank=True,null=True, verbose_name="Página web")
    CV= models.FileField(max_length=300,upload_to='media/Proyectos', blank=True,editable=False)
    Imagen = models.ImageField(max_length=300,upload_to='media/Proyectos',blank=True,null=True,default="static/images/default.png", verbose_name="Logo")
    Creador = models.ForeignKey(User,related_name="creador_proyecto",blank = True, null = True, editable=False)
    Editor = models.ForeignKey(User,related_name="editor_proyecto",blank = True, null = True, editable=False)

    def save(self, *args):
        if not self.Creador:
            self.Creador = get_request().user
        self.Editor = get_request().user
        for field in self._meta.fields:
            if field.name == 'Imagen':
                field.upload_to = 'media/Proyectos/%s' % unicodedata.normalize('NFKD', self.Nombre_proyecto).encode('ascii','ignore').replace(" ", "")
            if field.name == 'CV':
                field.upload_to = 'media/Proyectos/%s' % unicodedata.normalize('NFKD', self.Nombre_proyecto).encode('ascii','ignore').replace(" ", "")
        super(Proyectos, self).save()

    def esResponsable(self, user):
        if user:
            for u in self.Responsables.all():
                if u.id == user.id:
                    return True
        return False
    
    class Meta:
        db_table = 'Proyectos' 
        ordering = ['Nombre_proyecto']
        verbose_name = "Proyecto"
    
    def __unicode__(self):
        return force_unicode(self.Nombre_proyecto)
    
    def get_absolute_url(self):
        return '/comunidadcyt/proyectos/ver/%i' % self.id

class SolicitudIngresoProyecto(models.Model):
    Usuario = models.ForeignKey(User, related_name="solicitanteproy", verbose_name="Usuario")
    Proyecto = models.ForeignKey(Proyectos, related_name="grupoingreso", verbose_name="Proyecto")
    Mensaje = models.CharField(max_length=500, blank = True, null = True, verbose_name="Mensaje")

    class Meta:
        db_table = 'SolicitudIngresoProyecto'
        verbose_name = "Ingreso a Proyectos"

TIPOS_CHOICES = (
    ('Entrada','Entrada'),
    ('Salida','Salida'),
)

class HistorialProyecto(models.Model):
    Usuario = models.ForeignKey(User, related_name="histoproyuser", verbose_name="Usuario")
    Proyecto = models.ForeignKey(Proyectos, related_name="histoproyproy", verbose_name="Proyecto")
    Motivo = models.CharField(max_length=500,default = 'No especificado' ,blank = False, null = False, verbose_name="Motivo")
    Tipo = models.CharField(max_length=10, default = "Entrada",choices=TIPOS_CHOICES)
    Fecha = models.DateField(verbose_name="Fecha")

    class Meta:
        db_table = 'HistorialProyecto'
        verbose_name = "Historial de Proyecto"

    def save(self, *args, **kwargs):
        if self.Fecha is None:
            self.Fecha = datetime.datetime.today()
        super(HistorialProyecto, self).save(*args, **kwargs)
